import axios from './axios';

const API_BASE_URL = import.meta.env.VITE_API_BASE_URL;

export interface DataArchivingQueryParams {
  st?: string; // 开始时间
  et?: string; // 结束时间
  page: number; // 当前页
  ps: number;   // 每页条数
  source?: string; // 发起方
  status?: string; // 状态
  type?: string;   // 类型
  col?: string;    // 排序字段（新增）
  sort?: 'asc' | 'desc'; // 排序方式（新增）
}

export interface DataArchivingItem {
  rid: number;
  rfrom: string;
  rtime: string;
  rtype: string;
  rflag: string;
  rdata_type: string | null;
  rdata_st: string | null;
  rdata_et: string | null;
  rtask: string;
  rsat: string;
  rloop: string;
  rarc_num: string;
  rdate: string;
  rsource_sys: string;
  rtarget_sys: string;
  rcmd_num: string;
  rxml_path: string;
  rf_result_xml: string;
  rplan_flag: string;
  rstatus: string;
  rf_num: number;
  rf_success: number;
  rf_fail: number;
  total_size: string;
  rf_success_size: string;
  rf_fail_reason: string;
  ctime: string;
  utime: string;
}

export interface DataArchivingResponse {
  code: number;
  data: DataArchivingItem[];
  total: number;
  type_count?: Array<{
    t: number;    // 数量
    rtype: string; // 类型
  }>;
}

// 获取数据归档列表
export const getDataArchivingList = async (params: DataArchivingQueryParams): Promise<DataArchivingResponse> => {
  try {
    const response = await axios.post(
      `${API_BASE_URL}/-/bin.dataArchiving.get_data_archiving_list`,
      params
    );
    return response.data;
  } catch (error) {
    console.error('获取数据归档列表失败:', error);
    // 返回一个默认的错误响应
    return {
      code: 500,
      data: [],
      total: 0
    };
  }
};

// 数据归档统计查询参数接口
export interface DataArchivingStatParams {
  sd: string;   // 开始日期
  ed: string;   // 结束日期
  task: string; // 任务类型，ALL为全部，多个类型用逗号分隔
  flag?: string; // 时间颗粒度：day 或 month
}

// 数据归档统计项接口
export interface DataArchivingStatItem {
  ft: string;   // 存储文件数
  fz: number;   // 存储数据量
  rdate: string; // 时间
}

// 数据归档统计响应接口
export interface DataArchivingStatResponse {
  code: number;
  data: DataArchivingStatItem[];
}

// 获取数据归档统计
export const getDataArchivingStats = async (params: DataArchivingStatParams): Promise<DataArchivingStatResponse> => {
  // 处理task字段，移除所有'-'
  const newParams = {
    ...params,
    task: params.task ? params.task.replace(/-/g, '') : params.task
  };
  try {
    const response = await axios.post(
      `${API_BASE_URL}/-/bin.dataArchiving.get_data_archiving_stat`,
      newParams
    );
    return response.data;
  } catch (error) {
    console.error('获取数据归档统计失败:', error);
    // 返回一个默认的错误响应
    return {
      code: 500,
      data: []
    };
  }
};

// 数据发布统计项接口
export interface DataReleaseItem {
  t: number;    // 本月数据发布次数
  t_f: string;  // 文件数（字符串）
  t_z: number;  // 数据量（单位：字节，或后端约定单位）
}

// 数据发布响应接口
export interface DataReleaseResponse {
  code: number;
  data: DataReleaseItem[];
}

// 获取数据发布统计（本月）
export const getDataRelease = async (): Promise<DataReleaseResponse> => {
  try {
    const response = await axios.post(
      `${API_BASE_URL}/-/bin.dataArchiving.get_data_release`,
      {}
    );
    return response.data;
  } catch (error) {
    console.error('获取数据发布统计失败:', error);
    return {
      code: 500,
      data: []
    };
  }
};

// 地面站数据同步实时速率项接口
export interface SyncSpeedItem {
  real_speed: number; // 传输速率
  real_rate: number;  // 传输比率
  fileName: string;   // 文件名
  gras: string;       // 地面站名称(GRAS3/GRAS4/GRAS5)
}

// 地面站数据同步实时速率响应接口
export interface SyncSpeedResponse {
  code: number;
  stat_res: Record<string, any>;
  stat_speed: SyncSpeedItem[];
}

// 获取地面站数据同步实时速率
export const getSyncSpeed = async (): Promise<SyncSpeedResponse> => {
  try {
    const response = await axios.post(
      `${API_BASE_URL}/-/bin.preData.get_sync_file`
    );
    return response.data;
  } catch (error) {
    console.error('获取地面站数据同步实时速率失败:', error);
    // 返回一个默认的错误响应
    return {
      code: 500,
      stat_res: {},
      stat_speed: [
        { real_speed: 0, real_rate: 0, fileName: "", gras: "GRAS3" },
        { real_speed: 0, real_rate: 0, fileName: "", gras: "GRAS4" },
        { real_speed: 0, real_rate: 0, fileName: "", gras: "GRAS5" }
      ]
    };
  }
}; 
